package com.travel.dao;

import java.util.List;
import java.util.Map;

import com.travel.core.AbstractDao.Direction;
import com.travel.entities.Spot;

/**
 * 景点操作
 *
 * @author SAGITTAR
 */
public interface ISpotDao {

    /**
     * top hot景点数据
     * 
     * @param loc 当前城市
     * @param orderBy 排序规则
     * @param direction 升序降序选择
     * @return
     */
    List<Spot> getTopSpots(String loc, String orderBy, Direction direction);

    /**
     * 获取某个城市的景点的统计数据
     *
     * @param cityCode 城市编号，区号
     * @param from 开始时间，年份，包含
     * @param to 截止时间，年份，不包含
     * @return
     */
    List<Map<String, Object>> getStaticticsByYear(String cityCode, int from, int to);

    /**
     * 根据城市或者景点名称统计值
     *
     * @param spotNameOrCityCode 城市编号，区号或者景点名称
     * @param selectedType 查询类型，1为景点查询，2为城市查询，其余值无效
     * @param date 查询日期，例如：<br>
     *            2017年就是<code>"2017"</code><br>
     *            2017年11月就是<code>"2017-11"</code><br>
     *            2017年11月11日就是<code>"2017-11-11"</code><br>
     *            <strong>如果值为null，则表示查询最近一周内的数据</strong>
     * @return
     */
    int getStatisticsNumberByCityAndDate(String spotNameOrCityCode, int selectedType, String date);

    /**
     * 根据最近一周内的城市或者景点名称统计值
     *
     * @param spotNameOrCityCode 城市编号，区号或者景点名称
     * @param selectedType 查询类型，1为景点查询，2为城市查询，其余值无效
     * @return
     * @see #getStaticticsByCityOrSpotYear(String, List, int)
     */
    int getStatisticsNumberByCityAndDate(String spotNameOrCityCode, int selectedType);

    /**
     * 根据城市或者景点编号获取一年或多年内游客数量统计
     * 
     * @param spotNameOrCityCode 城市编号或者景点名称
     * @param years 需要查询的年份
     * @return 年份流量
     */
    List<Map<String, Object>> getStaticticsByCityOrSpotYear(String spotNameOrCityCode, List<String> years,
            int selectedType);
}
